#!/usr/bin/env python3

import json
import sys

def extract_ta_text(file_path):
    """
    从 parsed_window_login.json 文件中提取 name 为'项目'且 type 为'ta'的元素的 text 值
    """
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
        
        # 遍历 list 数组查找符合条件的元素
        def search_elements(elements):
            results = []
            processed_ddlist_names = set()  # 用于跟踪已处理的 ddlist 元素名称
            
            for element in elements:
                # 检查当前元素是否为 name '项目' 的 tab 元素
                if element.get('name') == '项目' and element.get('type') == 'tab':
                    # 查找该元素下的所有 ta 类型子元素
                    if 'child' in element:
                        for child in element['child']:
                            if child.get('type') == 'ta':
                                results.append({
                                    'name': child.get('name'),
                                    'type': child.get('type'),
                                    'text': child.get('text')
                                })
                    
                    # 处理兄弟节点 (同一列表中的其他元素)
                    for sibling in elements:
                        if sibling != element:  # 排除自身
                            sibling_name = sibling.get('name')
                            # 检查兄弟节点是否为 ddlist 类型，如果是，则提取其 list 数组中第一个子节点的 text 值
                            if sibling.get('type') == 'ddlist' and 'list' in sibling and sibling['list']:
                                if sibling_name not in processed_ddlist_names:  # 确保每个 ddlist 只处理一次
                                    first_item = sibling['list'][0]
                                    if 'text' in first_item and first_item['text']:
                                        results.append({
                                            'name': sibling.get('name'),
                                            'type': sibling.get('type'),
                                            'text': first_item['text']
                                        })
                                        processed_ddlist_names.add(sibling_name)  # 标记为已处理
                            # 也可以处理其他类型的兄弟节点
                            # 例如，提取其他 ta 类型兄弟节点的 text 值
                            elif sibling.get('type') == 'ta':
                                results.append({
                                    'name': sibling.get('name'),
                                    'type': sibling.get('type'),
                                    'text': sibling.get('text')
                                })
                
                # 检查当前元素是否为 ddlist 类型，如果是，则只提取其 list 数组中第一个子节点的 text 值
                if element.get('type') == 'ddlist' and 'list' in element and element['list']:
                    element_name = element.get('name')
                    if element_name not in processed_ddlist_names:  # 确保每个 ddlist 只处理一次
                        first_item = element['list'][0]
                        if 'text' in first_item and first_item['text']:
                            results.append({
                                'name': element.get('name'),
                                'type': element.get('type'),
                                'text': first_item['text']
                            })
                            processed_ddlist_names.add(element_name)  # 标记为已处理
                
                # 递归检查 child 数组
                if 'child' in element:
                    results.extend(search_elements(element['child']))
                
                # 递归检查 list 数组
                if 'list' in element:
                    results.extend(search_elements(element['list']))
            
            return results
        
        # 从根级别的 list 开始搜索
        if 'list' in data:
            results = search_elements(data['list'])
            
            # 输出结果
            if results:
                print("找到以下符合条件的元素:")
                for item in results:
                    print(f"name: {item['name']}, type: {item['type']}, text: {item['text']}")
            else:
                print("未找到 name 为'项目'且 type 为'ta'的元素")
        else:
            print("JSON 文件格式不正确，缺少 'list' 字段")
            
    except FileNotFoundError:
        print(f"错误: 文件 {file_path} 未找到")
    except json.JSONDecodeError as e:
        print(f"错误: JSON 解析失败 - {e}")
    except Exception as e:
        print(f"错误: {e}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("使用方法: python extract_ta_text.py <json_file_path>")
        sys.exit(1)
    
    file_path = sys.argv[1]
    extract_ta_text(file_path)